columnview: Add a GtkColumnView:reorderable property
authorMatthias Clasen <mclasen@redhat.com>
Wed, 3 Jun 2020 16:57:38 +0000 (12:57 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 3 Jun 2020 17:31:39 +0000 (13:31 -0400)
This property controls if users can reorder columns
by drag-and-drop. It defaults to TRUE.

docs/reference/gtk/gtk4-sections.txt
gtk/gtkcolumnview.c
gtk/gtkcolumnview.h

index a43604c216a2052fb43b98efdb49383c59c28be5..20f83525928618d8536885c2257f586f0c33acfc 100644 (file)
@@ -507,6 +507,8 @@ gtk_column_view_set_show_separators
 gtk_column_view_sort_by_column
 gtk_column_view_set_single_click_activate
 gtk_column_view_get_single_click_activate
+gtk_column_view_set_reorderable
+gtk_column_view_get_reorderable
 <SUBSECTION Standard>
 GTK_COLUMN_VIEW
 GTK_COLUMN_VIEW_CLASS
index bda7cdbc61bc78fce96a9c5b63d3de04e8b5a59b..414ca0d83d27ca9f1660b857b9dce259c4cd74bc 100644 (file)
@@ -70,6 +70,8 @@ struct _GtkColumnView
 
   GtkAdjustment *hadjustment;
 
+  gboolean reorderable;
+
   gboolean in_column_resize;
   int drag_pos;
   int drag_x;
@@ -92,6 +94,7 @@ enum
   PROP_VADJUSTMENT,
   PROP_VSCROLL_POLICY,
   PROP_SINGLE_CLICK_ACTIVATE,
+  PROP_REORDERABLE,
 
   N_PROPS
 };
@@ -361,6 +364,10 @@ gtk_column_view_get_property (GObject    *object,
       g_value_set_boolean (value, gtk_column_view_get_single_click_activate (self));
       break;
 
+    case PROP_REORDERABLE:
+      g_value_set_boolean (value, gtk_column_view_get_reorderable (self));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -432,6 +439,10 @@ gtk_column_view_set_property (GObject      *object,
       gtk_column_view_set_single_click_activate (self, g_value_get_boolean (value));
       break;
 
+    case PROP_REORDERABLE:
+      gtk_column_view_set_reorderable (self, g_value_get_boolean (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -528,6 +539,18 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
                           FALSE,
                           G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
+  /**
+   * GtkColumnView:reorderable:
+   *
+   * Whether columns are reorderable
+   */
+  properties[PROP_REORDERABLE] =
+    g_param_spec_boolean ("reorderable",
+                          P_("Reorderable"),
+                          P_("Whether columns are reorderable"),
+                          TRUE,
+                          G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (gobject_class, N_PROPS, properties);
 
   /**
@@ -726,6 +749,8 @@ gtk_column_view_init (GtkColumnView *self)
                           g_quark_from_static_string (I_("view")));
 
   gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN);
+
+  self->reorderable = TRUE;
 }
 
 /**
@@ -1081,3 +1106,40 @@ gtk_column_view_get_single_click_activate (GtkColumnView *self)
 
   return gtk_list_view_get_single_click_activate (self->listview);
 }
+
+/**
+ * gtk_column_view_set_reorderable:
+ * @self: a #GtkColumnView
+ * @reorderable: whether columns should be reorderable
+ *
+ * Sets whether columns should be reorderable by dragging.
+ */
+void
+gtk_column_view_set_reorderable (GtkColumnView *self,
+                                 gboolean       reorderable)
+{
+  g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+
+  if (self->reorderable == reorderable)
+    return;
+
+  self->reorderable = reorderable;
+
+  g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_REORDERABLE]);
+}
+
+/**
+ * gtk_column_view_get_reorderable:
+ * @self: a #GtkColumnView
+ *
+ * Returns whether columns are reorderable.
+ *
+ * Returns: %TRUE if columns are reorderable
+ */
+gboolean
+gtk_column_view_get_reorderable (GtkColumnView *self)
+{
+  g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), TRUE);
+
+  return self->reorderable;
+}
index 0866b6449ca0a6e262d79764ecfe789dc5315469..5cff5d73dcf4c24fd98d0c9d20b22d261d5d1b04 100644 (file)
@@ -92,6 +92,13 @@ void            gtk_column_view_set_single_click_activate       (GtkColumnView
 GDK_AVAILABLE_IN_ALL
 gboolean        gtk_column_view_get_single_click_activate       (GtkColumnView          *self);
 
+GDK_AVAILABLE_IN_ALL
+void            gtk_column_view_set_reorderable                 (GtkColumnView          *self,
+                                                                 gboolean                reorderable);
+GDK_AVAILABLE_IN_ALL
+gboolean        gtk_column_view_get_reorderable                 (GtkColumnView          *self);
+
+
 G_END_DECLS
 
 #endif  /* __GTK_COLUMN_VIEW_H__ */